草庐IT

Java final 与 C++ const

全部标签

c++ - `const T* const` 是什么意思?

我正在阅读一个C++模板示例,模板签名的一部分让我感到困惑。我没看错吗:constT*constfoo;foo是const*到constT吗? 最佳答案 是的,它是一个指向常量T的常量指针。也就是说,您既不能修改指针,也不能修改它指向的东西。constT*只会禁止您修改指针指向的任何内容,但它允许您(在语言范围内)检查*(foo+1)和*(foo-1)。当您将指针传递给不可变数组(例如您只应该读取的C字符串)时,请使用这种形式。T*const意味着您可以修改foo指向的T值,但不能修改指针本身;所以你不能说foo++;(*foo)+

c++ - 用于识别 "const"错失机会的开发工具

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion由于C++编译器(通常)可以检测违反constness,是否有任何工具可以识别将某些东西声明为const的错失机会>?

c++ - 我们可以用 `const_cast`来修饰一个常量吗?

这个问题在这里已经有了答案:Twodifferentvaluesatthesamememoryaddress(7个答案)关闭5年前。intmain(){constintia=10;int*pia=const_cast(&ia);*pia=5;std::cout输出是:0x28fef40x28fef4105*pia和ia具有相同的地址,但它们具有不同的值。我的目的是用const_cast修改一个常量值,结果显示不行。有人知道为什么吗?

c++ - int main(int, char const* const*) 格式正确吗?

根据C++11标准,下列程序是否为良构且可移植的C++?intmain(intargc,charconst*const*argv){} 最佳答案 没有。在纯可移植C++程序中,argv参数(如果存在)没有const修饰符。编辑:请参阅C++11标准草案第3.6.1.2节,其中(在我之前的版本中)指出:Animplementationshallnotpredefinethemainfunction.Thisfunctionshallnotbeoverloaded.Itshallhaveareturntypeoftypeint,buto

c++ - 移动语义和 const 引用

我已经花了很多时间为我的类实现移动语义,但现在我正在处理使用它的函数。好的,所以我有这个对象,它在堆上有很多数据:CLargeOb我为它实现了移动语义(构造函数和运算符=)。理想情况下是这样使用的:voidOtherOb::Func(CLargeOb&&largeOb1,CLargeOb&&largeOb2){SomeOtherFunc(largeOb1);//useobjectsSomeOtherFunc(largeOb2);m_largeOb1=(CLargeOb&&)largeOb1;//saveasmembersandtrashtheoriginalsm_largeOb2=(C

c++ - 为什么不将模板类型参数推断为 'const' ?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:deducingreferencestoconstfromrvaluearguments如果我有templatevoidfoo(T&){}我称它为foo((constint)5),鉴于参数是constint,为什么编译器不自动推断T是constint?

c++ - 唯一指针和 const 正确性

我没想到这段代码可以编译:#include#includeclassA{public:inlineintget()const{returnm_i;}inlinevoidset(constint&i){m_i=i;}private:intm_i;};intmain(){constautoptr=std::make_unique();ptr->set(666);//IdonotlikethislineD:get()如果ptr是一个原始的C指针,我会同意的。但由于我使用的是智能指针,我不明白这背后的原理是什么。我使用唯一指针来表达所有权,在面向对象编程中,这可以看作是对象组合(“部分”关系)

c++ - __FILE__ 可以在 C++ 中被 const char* 引用吗?

阅读从http://www.almostinfinite.com/memtrack.html链接的memTrack库后我有一个问题__FILE__可以保存在类型为constchar*的变量中forever并且不需要使用strdup()?BlockHeader::Stamp不是使用strdup()来分配__FILE__字符串吗?voidBlockHeader::Stamp(charconst*filename,intlineNum,charconst*typeName){myFilename=filename;//don'tusestrdup(filename)toassign?myLi

c++ - "expected nested-name-specifier before ‘const’ 错误“在 g++ 中类型名称为 const

我在C++中有这段代码templateclassDD:publicenumerables{...private:typenameconstDD&mContainer;}它给了我两条错误信息:错误:在“const”之前需要嵌套名称说明符错误:“&”标记前的声明符无效typenameconst有什么问题?代码?它使用MSVCC++编译得很好。已添加typenameDD&constmContainer;和consttypenameDD&mContainer;给我同样的错误。 最佳答案 那么,typename在那里做什么?您指的不是嵌套类型

c++ - 为什么 const 限定符不能作用于 const 对象的指针成员?

我知道这已经被问了很多,但我能找到的唯一答案是当使用(int*)或类似的东西实际上抛弃了const-ness时。当不涉及强制转换时,为什么const限定符不能作用于const对象上的指针类型成员变量?#includeclassbar{public:voiddoit(){std::coutdoit()\n";mybar1->doit();//Thiscallsbar::doit()insteadofbar::doit()conststd::cout上面的代码产生以下输出(在gcc4.5.2和vc100中测试):foo::doit()constcallingmybar1->doit()ba